package com.canic.dkd.base.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 自动对entity 的 创建人，创建时间，更新人，更新时间 这种与业务无关的字段 进行赋值
 * @author ZC
 */
@Slf4j
@Aspect
@Component
public class MybatisAuditAopDefault {

    /** 切点：新增方法 */
    @Pointcut("execution(* com.canic.dkd.web.*.mapper.*Mapper.insert*(..))")
    private void insertCutMethod() {
    }

    /** 切点: 更新方法 */
    @Pointcut("execution(* com.canic.dkd.web.*.mapper.*Mapper.update*(..))")
    private void updateCutMethod() {
    }

    @Around("insertCutMethod()")
    public Object doInsertAround(ProceedingJoinPoint pjp) throws Throwable {
        Object[] args = pjp.getArgs();
        for (Object arg : args) {
            AuditingAction.markCreateAuditing(arg);
        }
        return pjp.proceed();
    }

    @Around("updateCutMethod()")
    public Object doupdateAround(ProceedingJoinPoint pjp) throws Throwable {
        Object[] args = pjp.getArgs();
        for (Object arg : args) {
            AuditingAction.markUpdateAuditing(arg);
        }
        return pjp.proceed();
    }
}
